package com.haixiaoke.saas.contract.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.contract.domain.Contract;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 合同Service接口
 * 
 * @author panda
 * @date 2025-06-26
 */
public interface IContractService {
    /**
     * 查询合同
     * 
     * @param contractId 合同主键
     * @return 合同
     */
    Contract selectContractByContractId(String contractId);

    /**
     * 查询合同列表
     * 
     * @param contract 合同
     * @return 合同集合
     */
    List<Contract> selectContractList(Contract contract);

    /**
     * 新增合同
     * 
     * @param contract 合同
     * @return 结果
     */
    AjaxResult insertContract(Contract contract);

    /**
     * 修改合同
     * 
     * @param contract 合同
     * @return 结果
     */
    int updateContract(Contract contract);

    /**
     * 批量删除合同
     * 
     * @param contractIds 需要删除的合同主键集合
     * @return 结果
     */
     int deleteContractByContractIds(String[] contractIds);

    /**
     * 删除合同信息
     * 
     * @param contractId 合同主键
     * @return 结果
     */
     int deleteContractByContractId(String contractId);

    /**
     * 上传合同图片
     *
     * @param contract
     * @return
     */
    AjaxResult uploadContractImage(Contract contract);

    /**
     * 签署租客合同
     * @param contract
     * @param participantType true为甲方,false为乙方
     * @return
     */
    AjaxResult signingContract(Contract contract, Boolean participantType);

    AjaxResult selectContractPreviewUrl(Contract contract);

    /**
     * 入住合同
     * @param contractId
     * @param username
     * @return
     */
    AjaxResult checkIn(String contractId, String username, String tenantId);

    Contract selectContractByFlowId(String flowId);

    /**
     * 查询该房屋被租赁的时间段
     * @param houseId
     * @return
     */
    List<Map<String, Date>> checkTime(String houseId);

    Contract selectContractByHouseId(String houseId);
}
